Offentlige finanser


Ansatte
OFXOA1_raw <- 
  statgl_url("OFXOA1", lang = language) %>% 
  statgl_fetch(
    time                 = px_top(),
    "function"           = px_all(),
    "inventory variable" = "F",
    .col_code            = TRUE
  ) %>% 
  as_tibble()

OFXOA1 <- 
  OFXOA1_raw %>% 
  mutate(
    `function` = `function` %>% str_remove_all("[:digit:]|\\.") %>% trimws(),
    `function` = `function` %>% fct_reorder(value, .fun = sum, .desc = TRUE)
    ) %>% 
  spread(`inventory variable`, value) %>% 
  arrange(`function`)

OFXOA1 %>% 
  select(-time) %>% 
  rename(" " = 1) %>% 
  statgl_table(replace_0s = TRUE) %>% 
  pack_rows(index = OFXOA1[["time"]] %>% table()) %>% 
  row_spec(1, bold = TRUE)
Fuldtidsbeskæftigede
2022
Alle 11.224
Social beskyttelse 4.627
Undervisning 2.422
Sundhedsvæsen 1.650
Generelle offentlige tjenester 1.287
Økonomiske anliggender 577
Fritid, kultur og religion 337
Miljøbeskyttelse 265
Offentlig orden og sikkerhed 31
Boliger og offentlige faciliteter 29
Forsvar 0


Se Statistikbankens tabel: OFXOA1

Kommunale regnskaber


OFXUKN1_raw <- 
  statgl_url("OFXUKN1", lang = language) %>%
  statgl_fetch(
    time       = px_top(),
    district   = c("000", "955", "956", "957", "958", "959", "960"),
    keyfigures = px_all(),
    .col_code  = TRUE
  ) %>% 
  as_tibble()

OFXUKN1 <- 
  OFXUKN1_raw %>% 
  filter(value != "NA") %>% 
  mutate(
    keyfigures = keyfigures %>% fct_inorder(),
    district = district %>% fct_reorder(value, .fun = sum, .desc = TRUE)
  ) %>% 
  spread(district, value)

OFXUKN1 %>% 
  select(-time) %>% 
  rename(" " = 1) %>% 
  statgl_table() %>% 
  pack_rows(index = OFXUKN1[["time"]] %>% table())
Alle kommuner Kommuneqarfik Sermersooq Avannaata Kommunia Qeqqata Kommunia Kommune Qeqertalik Kommune Kujalleq
2022
Alle børn i dagtilbud 3.718,0 1.428,0 713,0 712,0 462,0 403,0
Børn 0 år 134,0 29,0 18,0 49,0 23,0 15,0
Børn 1-2 år 1.413,0 559,0 252,0 272,0 168,0 162,0
Børn 3-5 år 2.153,0 835,0 434,0 388,0 270,0 226,0
Børn 6 år 18,0 5,0 9,0 3,0 1,0 0,0
Ledere 76,0 24,0 13,0 19,0 10,0 11,0
Pædagoger 153,0 63,0 32,0 24,0 14,0 20,0
Pædagogisk uddannet 252,0 102,0 45,0 46,0 29,0 30,0
Pædagogmedhjælper 475,0 178,0 100,0 96,0 66,0 35,0
Køkken- og rengøringsmedarbejder 174,0 57,0 42,0 24,0 27,0 25,0
Fuldtidsbeskæftigede i alt 1.129,0 423,0 231,0 209,0 144,0 121,0
Børneenheder 4.749,0 1.820,0 893,0 926,0 589,0 521,0
Pædagoger af børnepersonale (pct.) 17,4 18,3 18,1 14,5 12,5 23,8
Børneenheder pr. børnepersonale 5,4 5,3 5,1 5,6 5,5 6,1
Dækningsgrad for børn 0-5 år (pct.) 75,8 71,6 70,3 84,2 87,0 77,5
Dagtilbud institutioner 158,0 47,0 38,0 35,0 21,0 17,0


Se Statistikbankens tabel: OFXUKN1

Offentlige finanser
OFXFUNK_raw <- 
  statgl_url("OFXFUNK", lang = language) %>%
  statgl_fetch(
    time       = px_top(),
    sector     = 0,
    "function" = c(0, 1, 8, 11, 17, 25, 29, 33, 39, 44, 50),
    .col_code  = TRUE
  ) %>% 
  as_tibble()

OFXFUNK <- 
  OFXFUNK_raw %>% 
  mutate(
    `function` = `function` %>% 
      str_remove_all("[:digit:]|\\.") %>% 
      trimws() %>% 
      fct_reorder(value, .fun = sum, .desc = TRUE)
    ) %>% 
  spread(sector, value)

OFXFUNK %>% 
  select(-time) %>% 
  rename(" " = 1) %>% 
  statgl_table() %>% 
  pack_rows(index = OFXFUNK[["time"]] %>% table()) %>% 
  row_spec(1, bold = TRUE) |> 
  add_footnote("i 1.000 kr.", notation = "symbol")
Den samlede offentlige sektor
2022
Udgifter i alt 12.799.615
Social beskyttelse 3.717.991
Undervisning 2.115.774
Generelle offentlig tjenester 1.800.941
Sundhedsvæsen 1.778.459
Økonomiske anliggender 1.186.866
Offentlig orden og sikkerhed 962.823
Fritid, kultur og religion 371.474
Boliger og offentlige faciliteter 343.208
Forsvar 278.368
Miljøbeskyttelse 243.711
* i 1.000 kr.


Se Statistikbankens tabel: OFXFUNK

OFXREAI_raw <- 
  statgl_url("OFXREAI", lang = language) %>%
  statgl_fetch(
    sector      = 0,
    transaction = c(0, 1, 2, 5, 8, 12, 13, 14, 15, 16, 29, 30, 31, 42, 43),
    time        = px_top(),
    .col_code   = TRUE
  ) %>% 
  as_tibble()

OFXREAI <- 
  OFXREAI_raw %>% 
  mutate(
    transaction = transaction %>% str_remove_all("[:digit:]|\\+|\\(|\\)") %>% trimws() %>% fct_inorder()
    ) %>% 
  mutate_if(is.integer, replace_na, replace = 0) %>% 
  filter(value != 0) %>% 
  spread(sector, value)
  
  
OFXREAI %>% 
  select(-time) %>% 
  arrange(desc(transaction)) %>% 
  rename(" " = 1) %>% 
  statgl_table(replace_0s = TRUE) %>% 
  pack_rows(index = OFXREAI[["time"]] %>% table()) %>% 
  row_spec(1, bold = TRUE) |> 
  add_footnote("i 1.000 kr.", notation = "symbol")
Den samlede offentlige sektor
2022
Drifts- og kapitalindtægter i alt 13.527.882
Driftsindtægter i alt 13.527.882
Andre løbende overførsler i alt 5.650.844
Løbende indkomst- og formueskatter 5.317.816
Produktions- og importskatter 1.389.473
Renter samt udbytter 399.162
Udtræk af indkomst fra offentlige kvasi-selskaber 83.123
Bruttorestindkomst 687.465
* i 1.000 kr.


Se Statistikbankens tabel: OFXREAI

Regnskabstal for Landskassen


Tabellerne er for store. Se statistikbanken under Offentlige finanser, regnskabstal for landskassen.


Sidst opdateret: 17. april 2024
LS0tDQpwYXJhbXM6DQogIGxhbmc6ICJkYSINCm91dHB1dDoNCiAgc3RhdGdsOjpzdGF0Z2xfcmVwb3J0Og0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCmVkaXRvcl9vcHRpb25zOiANCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGNvbnNvbGUNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KCWVjaG8gICAgPSBUUlVFLA0KCW1lc3NhZ2UgPSBGQUxTRSwNCgl3YXJuaW5nID0gRkFMU0UsDQoJY2xhc3Mub3V0cHV0ID0gInNjcm9sbC0xMDAiDQopDQoNCmxpYnJhcnkoInRpZHl2ZXJzZSIpDQpsaWJyYXJ5KCJzdGF0Z2wiKQ0KbGlicmFyeSgia2FibGVFeHRyYSIpDQpsaWJyYXJ5KCJsdWJyaWRhdGUiKQ0KbGlicmFyeSgieWFtbCIpDQoNCmxhbmd1YWdlICA8LSBwYXJhbXMkbGFuZw0Kb3B0aW9uICAgIDwtIHBhc3RlMCgiP2xhbmc9IiwgbGFuZ3VhZ2UsICImc2VsZWN0IikNCmxvZ28gICAgICA8LSBwYXN0ZTAoZ2V0d2QoKSwiL2FkZC9sb2dvLmdpZiIpDQp0eHQgICAgICAgPC0gcmVhZF95YW1sKHBhc3RlMChnZXR3ZCgpLCAiL2FkZC90eHQueW1sIiksIGZpbGVFbmNvZGluZyA9ICJJU08tODg1OS0xIikNCnNvdXJjZSAgICA8LSB0eHQkc291cmNlW2xhbmd1YWdlXSAlPiUgdW5saXN0KCkNCg0KeGFyaW5nYW5FeHRyYTo6dXNlX2NsaXBib2FyZCgpDQoNCmBgYA0KDQpgYGB7Y3NzLCBlY2hvID0gRkFMU0V9DQoNCi5hY2NvcmRpb24gew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTE5OTAwOw0KICBjb2xvcjogd2hpdGU7DQogIGN1cnNvcjogcG9pbnRlcjsNCiAgcGFkZGluZzogMThweDsNCiAgd2lkdGg6IDEwMCU7DQogIGJvcmRlcjogbm9uZTsNCiAgYm9yZGVyLXJhZGl1czogNXB4Ow0KICB0ZXh0LWFsaWduOiBsZWZ0Ow0KICBvdXRsaW5lOiBub25lOw0KICBmb250LXNpemU6IDE1cHg7DQogIHRyYW5zaXRpb246IDAuNHM7DQp9DQoNCi5hY3RpdmUsIC5hY2NvcmRpb246aG92ZXIgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjk3MjQyOw0KfQ0KDQouYWNjb3JkaW9uOmFmdGVyIHsNCiAgY29udGVudDogJ1wwMDJCJzsNCiAgY29sb3I6ICM3Nzc7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBmbG9hdDogcmlnaHQ7DQogIG1hcmdpbi1sZWZ0OiA1cHg7DQp9DQoNCi5hY3RpdmU6YWZ0ZXIgew0KICBjb250ZW50OiAiXDIyMTIiOw0KfQ0KDQoucGFuZWwgew0KICBwYWRkaW5nOiAwcHggNXB4IDBweCA1cHg7DQogIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOw0KICBtYXgtaGVpZ2h0OiAwOw0KICBvdmVyZmxvdzogaGlkZGVuOw0KICB0cmFuc2l0aW9uOiBtYXgtaGVpZ2h0IDAuMnMgZWFzZS1vdXQ7DQp9DQoNCmRldGFpbHMgew0KICB3aWR0aDogMTAwJTsNCn0NCg0KZGV0YWlscyA+IHN1bW1hcnkgew0KICBwYWRkaW5nOiA0cHggMTJweDsNCiAgd2lkdGg6IDEwMCU7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMDdmOTk7DQogIGJvcmRlcjogc29saWQ7DQogIGJvcmRlci1jb2xvcjogd2hpdGU7DQogIGJvcmRlci1yYWRpdXM6IDVweDsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICBmb250LXNpemU6IDE1cHg7DQogIGNvbG9yOiB3aGl0ZTsNCn0NCg0KZGV0YWlsc1tvcGVuXSA+IHN1bW1hcnkgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFhNDFhOw0KfQ0KDQoNCi50aXRsZSB7DQogIGNvbG9yOiAjMWI1NDYzOw0KICBmb250LXNpemU6IDM2cHg7DQp9DQoNCg0KLnBlcnNvbmVyIHsNCiAgYm94LXNoYWRvdzogM3B4IDNweCA0cHggYmxhY2s7DQogIGJhY2tncm91bmQ6ICMwMDQ0NTk7DQogIHBhZGRpbmctcmlnaHQ6IDE1cHg7DQogIHBhZGRpbmctbGVmdDogMTZweDsNCiAgcGFkZGluZy10b3A6IDAuMXB4Ow0KICBwYWRkaW5nLWJvdHRvbTogMXB4Ow0KICBmb250LXNpemU6IDExcHg7DQogIGNvbG9yOiB3aGl0ZTsNCiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCn0NCg0KLsO4a29ub21pIHsNCiAgYm94LXNoYWRvdzogM3B4IDNweCA0cHggYmxhY2s7DQogIGJhY2tncm91bmQ6ICMwMDdGOTk7DQogIHBhZGRpbmctcmlnaHQ6IDE1cHg7DQogIHBhZGRpbmctbGVmdDogMTZweDsNCiAgcGFkZGluZy10b3A6IDFweDsNCiAgcGFkZGluZy1ib3R0b206IDAuMXB4Ow0KICBmb250LXNpemU6IDExcHg7DQogIGNvbG9yOiB3aGl0ZTsNCiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCn0NCg0KLnR2w6ZyZ8OlZW5kZSB7DQogIGJveC1zaGFkb3c6IDNweCAzcHggNHB4IGJsYWNrOw0KICBiYWNrZ3JvdW5kOiAjZmFhNDFhOw0KICBwYWRkaW5nLXJpZ2h0OiAxNXB4Ow0KICBwYWRkaW5nLWxlZnQ6IDE2cHg7DQogIHBhZGRpbmctdG9wOiAwLjFweDsNCiAgcGFkZGluZy1ib3R0b206IDFweDsNCiAgZm9udC1zaXplOiAxMXB4Ow0KICBjb2xvcjogd2hpdGU7DQogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7DQp9DQoNCi5jb250YWluZXIgew0KICB3aWR0aDogaW5oZXJpdDsNCn0NCg0KLnNjcm9sbC0xMDAgew0KICBtYXgtaGVpZ2h0OiAxMDA7DQogIG92ZXJmbG93LXk6IGF1dG87DQogIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7DQp9DQoNCg0KcHJlIHsNCiAgbWF4LWhlaWdodDogMzAwcHg7DQogIG92ZXJmbG93LXk6IGF1dG87DQp9DQoNCnByZVtjbGFzc10gew0KICBtYXgtaGVpZ2h0OiAzMDBweDsNCn0NCg0KYGBgDQoNCjxicj4NCjxicj4NCg0KPGNlbnRlcj4NCg0KLS0tDQogDQojIFtgciB0eHQkT0YkdGl0bGVbbGFuZ3VhZ2VdYF17LnRpdGxlfQ0KIA0KLS0tDQo8L2NlbnRlcj4NCg0KPGRldGFpbHM+IDxzdW1tYXJ5PiBgciB0eHQkT0Ykc3ViMVtsYW5ndWFnZV1gIDwvc3VtbWFyeT4gDQo8YnI+DQo8YnV0dG9uIGNsYXNzPSJhY2NvcmRpb24iPiBgciBwYXN0ZTAoIioqVGFiZWwgMTogKioiLCBzdGF0Z2xfbWV0YShzdGF0Z2xfdXJsKCJPRlhPQTEiLCBsYW5nID0gbGFuZ3VhZ2UpKVsxXSR0aXRsZSkgYCA8L2J1dHRvbj4gPGRpdiBjbGFzcz0icGFuZWwiPg0KYGBge3IgT0ZYT0ExfQ0KDQpPRlhPQTFfcmF3IDwtIA0KICBzdGF0Z2xfdXJsKCJPRlhPQTEiLCBsYW5nID0gbGFuZ3VhZ2UpICU+JSANCiAgc3RhdGdsX2ZldGNoKA0KICAgIHRpbWUgICAgICAgICAgICAgICAgID0gcHhfdG9wKCksDQogICAgImZ1bmN0aW9uIiAgICAgICAgICAgPSBweF9hbGwoKSwNCiAgICAiaW52ZW50b3J5IHZhcmlhYmxlIiA9ICJGIiwNCiAgICAuY29sX2NvZGUgICAgICAgICAgICA9IFRSVUUNCiAgKSAlPiUgDQogIGFzX3RpYmJsZSgpDQoNCk9GWE9BMSA8LSANCiAgT0ZYT0ExX3JhdyAlPiUgDQogIG11dGF0ZSgNCiAgICBgZnVuY3Rpb25gID0gYGZ1bmN0aW9uYCAlPiUgc3RyX3JlbW92ZV9hbGwoIls6ZGlnaXQ6XXxcXC4iKSAlPiUgdHJpbXdzKCksDQogICAgYGZ1bmN0aW9uYCA9IGBmdW5jdGlvbmAgJT4lIGZjdF9yZW9yZGVyKHZhbHVlLCAuZnVuID0gc3VtLCAuZGVzYyA9IFRSVUUpDQogICAgKSAlPiUgDQogIHNwcmVhZChgaW52ZW50b3J5IHZhcmlhYmxlYCwgdmFsdWUpICU+JSANCiAgYXJyYW5nZShgZnVuY3Rpb25gKQ0KDQpPRlhPQTEgJT4lIA0KICBzZWxlY3QoLXRpbWUpICU+JSANCiAgcmVuYW1lKCIgIiA9IDEpICU+JSANCiAgc3RhdGdsX3RhYmxlKHJlcGxhY2VfMHMgPSBUUlVFKSAlPiUgDQogIHBhY2tfcm93cyhpbmRleCA9IE9GWE9BMVtbInRpbWUiXV0gJT4lIHRhYmxlKCkpICU+JSANCiAgcm93X3NwZWMoMSwgYm9sZCA9IFRSVUUpDQoNCmBgYA0KPGJyPg0KWyFbXShgciBsb2dvYCl7d2lkdGg9NDB9YHIgcGFzdGUoc291cmNlLCAiT0ZYT0ExIilgXShgciBwYXN0ZTAoImh0dHBzOi8vYmFuay5zdGF0LmdsOjQ0My9zcS8yNDk1NmY2Mi01ZDAzLTRmOTAtOTAxMC1jYzhlNDZkMTM5MWYiLCBvcHRpb24pYCl7dGFyZ2V0PSJfYmxhbmsifQ0KPC9kaXY+IA0KDQo8L2RldGFpbHM+DQoNCjxkZXRhaWxzPiA8c3VtbWFyeT4gYHIgdHh0JE9GJHN1YjJbbGFuZ3VhZ2VdYCA8L3N1bW1hcnk+DQo8YnI+DQoNCjxidXR0b24gY2xhc3M9ImFjY29yZGlvbiI+IGByIHBhc3RlMCgiKipUYWJlbCAyOiAqKiIsIHN0YXRnbF9tZXRhKHN0YXRnbF91cmwoIk9GWFVLTjEiLCBsYW5nID0gbGFuZ3VhZ2UpKVsxXSR0aXRsZSkgYCA8L2J1dHRvbj4gPGRpdiBjbGFzcz0icGFuZWwiPg0KDQpgYGB7ciBPRlhVS04xfQ0KDQpPRlhVS04xX3JhdyA8LSANCiAgc3RhdGdsX3VybCgiT0ZYVUtOMSIsIGxhbmcgPSBsYW5ndWFnZSkgJT4lDQogIHN0YXRnbF9mZXRjaCgNCiAgICB0aW1lICAgICAgID0gcHhfdG9wKCksDQogICAgZGlzdHJpY3QgICA9IGMoIjAwMCIsICI5NTUiLCAiOTU2IiwgIjk1NyIsICI5NTgiLCAiOTU5IiwgIjk2MCIpLA0KICAgIGtleWZpZ3VyZXMgPSBweF9hbGwoKSwNCiAgICAuY29sX2NvZGUgID0gVFJVRQ0KICApICU+JSANCiAgYXNfdGliYmxlKCkNCg0KT0ZYVUtOMSA8LSANCiAgT0ZYVUtOMV9yYXcgJT4lIA0KICBmaWx0ZXIodmFsdWUgIT0gIk5BIikgJT4lIA0KICBtdXRhdGUoDQogICAga2V5ZmlndXJlcyA9IGtleWZpZ3VyZXMgJT4lIGZjdF9pbm9yZGVyKCksDQogICAgZGlzdHJpY3QgPSBkaXN0cmljdCAlPiUgZmN0X3Jlb3JkZXIodmFsdWUsIC5mdW4gPSBzdW0sIC5kZXNjID0gVFJVRSkNCiAgKSAlPiUgDQogIHNwcmVhZChkaXN0cmljdCwgdmFsdWUpDQoNCk9GWFVLTjEgJT4lIA0KICBzZWxlY3QoLXRpbWUpICU+JSANCiAgcmVuYW1lKCIgIiA9IDEpICU+JSANCiAgc3RhdGdsX3RhYmxlKCkgJT4lIA0KICBwYWNrX3Jvd3MoaW5kZXggPSBPRlhVS04xW1sidGltZSJdXSAlPiUgdGFibGUoKSkNCg0KYGBgDQo8YnI+DQpbIVtdKGByIGxvZ29gKXt3aWR0aD00MH1gciBwYXN0ZShzb3VyY2UsICJPRlhVS04xIilgXShgciBwYXN0ZTAoImh0dHBzOi8vYmFuay5zdGF0LmdsOjQ0My9zcS9jYTNjNDIxMy00YWFiLTRmMTYtOWNkYi03MzhmNWMxZTk5MTUiLCBvcHRpb24pYCl7dGFyZ2V0PSJfYmxhbmsifQ0KPC9kaXY+IA0KDQoNCjwvZGV0YWlscz4NCg0KPGRldGFpbHM+IDxzdW1tYXJ5PiBgciB0eHQkT0Ykc3ViM1tsYW5ndWFnZV1gIDwvc3VtbWFyeT4gDQo8YnI+DQo8YnV0dG9uIGNsYXNzPSJhY2NvcmRpb24iPiBgciBwYXN0ZTAoIioqVGFiZWwgMzogKioiLCBzdGF0Z2xfbWV0YShzdGF0Z2xfdXJsKCJPRlhGVU5LIiwgbGFuZyA9IGxhbmd1YWdlKSlbMV0kdGl0bGUpIGAgPC9idXR0b24+IDxkaXYgY2xhc3M9InBhbmVsIj4NCg0KYGBge3IgT0ZYRlVOS30NCg0KT0ZYRlVOS19yYXcgPC0gDQogIHN0YXRnbF91cmwoIk9GWEZVTksiLCBsYW5nID0gbGFuZ3VhZ2UpICU+JQ0KICBzdGF0Z2xfZmV0Y2goDQogICAgdGltZSAgICAgICA9IHB4X3RvcCgpLA0KICAgIHNlY3RvciAgICAgPSAwLA0KICAgICJmdW5jdGlvbiIgPSBjKDAsIDEsIDgsIDExLCAxNywgMjUsIDI5LCAzMywgMzksIDQ0LCA1MCksDQogICAgLmNvbF9jb2RlICA9IFRSVUUNCiAgKSAlPiUgDQogIGFzX3RpYmJsZSgpDQoNCk9GWEZVTksgPC0gDQogIE9GWEZVTktfcmF3ICU+JSANCiAgbXV0YXRlKA0KICAgIGBmdW5jdGlvbmAgPSBgZnVuY3Rpb25gICU+JSANCiAgICAgIHN0cl9yZW1vdmVfYWxsKCJbOmRpZ2l0Ol18XFwuIikgJT4lIA0KICAgICAgdHJpbXdzKCkgJT4lIA0KICAgICAgZmN0X3Jlb3JkZXIodmFsdWUsIC5mdW4gPSBzdW0sIC5kZXNjID0gVFJVRSkNCiAgICApICU+JSANCiAgc3ByZWFkKHNlY3RvciwgdmFsdWUpDQoNCk9GWEZVTksgJT4lIA0KICBzZWxlY3QoLXRpbWUpICU+JSANCiAgcmVuYW1lKCIgIiA9IDEpICU+JSANCiAgc3RhdGdsX3RhYmxlKCkgJT4lIA0KICBwYWNrX3Jvd3MoaW5kZXggPSBPRlhGVU5LW1sidGltZSJdXSAlPiUgdGFibGUoKSkgJT4lIA0KICByb3dfc3BlYygxLCBib2xkID0gVFJVRSkgfD4gDQogIGFkZF9mb290bm90ZSgiaSAxLjAwMCBrci4iLCBub3RhdGlvbiA9ICJzeW1ib2wiKQ0KDQpgYGANCjxicj4NClshW10oYHIgbG9nb2Ape3dpZHRoPTQwfWByIHBhc3RlKHNvdXJjZSwgIk9GWEZVTksiKWBdKGByIHBhc3RlMCgiaHR0cHM6Ly9iYW5rLnN0YXQuZ2w6NDQzL3NxLzkzYjE5OGU5LTI3MGYtNDFlYS05ODI4LTJlNGNmMmVjNjIzZiIsIG9wdGlvbilgKXt0YXJnZXQ9Il9ibGFuayJ9DQo8L2Rpdj4gDQoNCg0KPGJ1dHRvbiBjbGFzcz0iYWNjb3JkaW9uIj4gYHIgcGFzdGUwKCIqKlRhYmVsIDQ6ICoqIiwgc3RhdGdsX21ldGEoc3RhdGdsX3VybCgiT0ZYUkVBSSIsIGxhbmcgPSBsYW5ndWFnZSkpWzFdJHRpdGxlKSBgIDwvYnV0dG9uPiA8ZGl2IGNsYXNzPSJwYW5lbCI+DQoNCmBgYHtyIE9GWFJFQUl9DQoNCk9GWFJFQUlfcmF3IDwtIA0KICBzdGF0Z2xfdXJsKCJPRlhSRUFJIiwgbGFuZyA9IGxhbmd1YWdlKSAlPiUNCiAgc3RhdGdsX2ZldGNoKA0KICAgIHNlY3RvciAgICAgID0gMCwNCiAgICB0cmFuc2FjdGlvbiA9IGMoMCwgMSwgMiwgNSwgOCwgMTIsIDEzLCAxNCwgMTUsIDE2LCAyOSwgMzAsIDMxLCA0MiwgNDMpLA0KICAgIHRpbWUgICAgICAgID0gcHhfdG9wKCksDQogICAgLmNvbF9jb2RlICAgPSBUUlVFDQogICkgJT4lIA0KICBhc190aWJibGUoKQ0KDQpPRlhSRUFJIDwtIA0KICBPRlhSRUFJX3JhdyAlPiUgDQogIG11dGF0ZSgNCiAgICB0cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uICU+JSBzdHJfcmVtb3ZlX2FsbCgiWzpkaWdpdDpdfFxcK3xcXCh8XFwpIikgJT4lIHRyaW13cygpICU+JSBmY3RfaW5vcmRlcigpDQogICAgKSAlPiUgDQogIG11dGF0ZV9pZihpcy5pbnRlZ2VyLCByZXBsYWNlX25hLCByZXBsYWNlID0gMCkgJT4lIA0KICBmaWx0ZXIodmFsdWUgIT0gMCkgJT4lIA0KICBzcHJlYWQoc2VjdG9yLCB2YWx1ZSkNCiAgDQogIA0KT0ZYUkVBSSAlPiUgDQogIHNlbGVjdCgtdGltZSkgJT4lIA0KICBhcnJhbmdlKGRlc2ModHJhbnNhY3Rpb24pKSAlPiUgDQogIHJlbmFtZSgiICIgPSAxKSAlPiUgDQogIHN0YXRnbF90YWJsZShyZXBsYWNlXzBzID0gVFJVRSkgJT4lIA0KICBwYWNrX3Jvd3MoaW5kZXggPSBPRlhSRUFJW1sidGltZSJdXSAlPiUgdGFibGUoKSkgJT4lIA0KICByb3dfc3BlYygxLCBib2xkID0gVFJVRSkgfD4gDQogIGFkZF9mb290bm90ZSgiaSAxLjAwMCBrci4iLCBub3RhdGlvbiA9ICJzeW1ib2wiKQ0KDQpgYGANCjxicj4NClshW10oYHIgbG9nb2Ape3dpZHRoPTQwfWByIHBhc3RlKHNvdXJjZSwgIk9GWFJFQUkiKWBdKGByIHBhc3RlMCgiaHR0cHM6Ly9iYW5rLnN0YXQuZ2w6NDQzL3NxLzhkODA0NzFlLTNlYzctNDRlMC1hNDNkLWI3Y2M4ZjBhMjJkYiIsIG9wdGlvbilgKXt0YXJnZXQ9Il9ibGFuayJ9DQo8L2Rpdj4gDQogDQoNCjwvZGV0YWlscz4gDQoNCjxkZXRhaWxzPiA8c3VtbWFyeT4gYHIgdHh0JE9GJHN1YjRbbGFuZ3VhZ2VdYCA8L3N1bW1hcnk+DQoNCjxicj4NClRhYmVsbGVybmUgZXIgZm9yIHN0b3JlLiBTZSBzdGF0aXN0aWtiYW5rZW4gdW5kZXIgT2ZmZW50bGlnZSBmaW5hbnNlciwgcmVnbnNrYWJzdGFsIGZvciBsYW5kc2thc3Nlbi4NCg0KPC9kZXRhaWxzPiANCg0KDQo8aHIgc3R5bGU9ImJvcmRlcjoxcHggcmlkZ2UgbGlnaHRncmF5Ij4gPC9ocj4NCjxjZW50ZXI+IDxzcGFuIHN0eWxlPSdjb2xvcjojRDNEM0QzOyBmb250LXNpemU6OTAlOyc+IGByIHBhc3RlKHR4dCR1cGRhdGVbbGFuZ3VhZ2VdLCBmb3JtYXQoU3lzLkRhdGUoKSwgIiVkLiAlQiAlWSIpKWAgPC9zcGFuPiA8L2NlbnRlcj4NCg0KDQoNCg0KPHNjcmlwdD4NCnZhciBhY2MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJhY2NvcmRpb24iKTsNCnZhciBpOw0KDQpmb3IgKGkgPSAwOyBpIDwgYWNjLmxlbmd0aDsgaSsrKSB7DQogIGFjY1tpXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGZ1bmN0aW9uKCkgew0KICAgIHRoaXMuY2xhc3NMaXN0LnRvZ2dsZSgiYWN0aXZlIik7DQogICAgdmFyIHBhbmVsID0gdGhpcy5uZXh0RWxlbWVudFNpYmxpbmc7DQogICAgaWYgKHBhbmVsLnN0eWxlLm1heEhlaWdodCkgew0KICAgICAgcGFuZWwuc3R5bGUubWF4SGVpZ2h0ID0gbnVsbDsNCiAgICB9IGVsc2Ugew0KICAgICAgcGFuZWwuc3R5bGUubWF4SGVpZ2h0ID0gcGFuZWwuc2Nyb2xsSGVpZ2h0ICsgInB4IjsNCiAgICB9IA0KICB9KTsNCn0NCjwvc2NyaXB0Pg0K